package com.vo;

import com.exception.PageIndexIllegalException;
import com.form.PageForm;
import lombok.Data;
import org.springframework.beans.BeanUtils;

import java.util.List;

/**
 * Version: V1.0    <br/>
 * Datetime:   2021/12/31 1:45   <br/>
 * Description: 分页视图对象
 *
 * @author: chen
 */
@Data
public class PageVo<T> {

    /**
     * 分页数据
     */
    private List<T> records;
    /**
     * 总条数
     */
    private Long total;

    /**
     * 总页数
     */
    private Long pages;

    /**
     * 当前页
     */
    private Integer pageIndex;

    /**
     * 查询数量
     */
    private Integer pageSize;

    /**
     * 设置当前页和每页显示的数量
     *
     * @param pageForm 分页表单
     * @return 返回分页信息
     */
    public PageVo<T> setCurrentAndSize(PageForm<?> pageForm) {
        assert (pageForm != null);
        // 设定默认值，防止字段为空报错
        if (pageForm.getPageSize() == null) {
            pageForm.setPageSize(20);
        }
        if (pageForm.getPageIndex() == null) {
            pageForm.setPageIndex(1);
        }
        BeanUtils.copyProperties(pageForm, this);
        return this;
    }

    /**
     * 设置总记录数
     *
     * @param total 总记录数
     */
    public void setTotal(Long total) {
        this.total = total;
        // 处理记录为0
        if (total == 0) {
            this.setPages(1L);
        } else {
            this.setPages(this.total % this.pageSize > 0 ? this.total / this.pageSize + 1 : this.total / this.pageSize);
        }
        // 如果页码异常
        if (this.pageIndex <= 0 || this.pageIndex > this.pages) {
            throw new PageIndexIllegalException();
        }
    }
}